<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::util::Unique_id_holder Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Public API.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1util.html">util</a></li><li class="navelem"><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html">Unique_id_holder</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="classflow_1_1util_1_1Unique__id__holder-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::util::Unique_id_holder Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from all other objects of the same class ever constructed, across all time from program start to end.  
 <a href="classflow_1_1util_1_1Unique__id__holder.html#details">More...</a></p>

<p><code>#include &lt;uniq_id_holder.hpp&gt;</code></p>
<div class="dynheader">
Inheritance diagram for flow::util::Unique_id_holder:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1util_1_1Unique__id__holder__inherit__graph.svg" width="502" height="156"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:af9cbe2432658aac398498e0a7e96405f"><td class="memItemLeft" align="right" valign="top"><a id="af9cbe2432658aac398498e0a7e96405f" name="af9cbe2432658aac398498e0a7e96405f"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>id_t</b> = uint64_t</td></tr>
<tr class="memdesc:af9cbe2432658aac398498e0a7e96405f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raw integer type to uniquely identify a thing. 64-bit width should make overflow extremely hard to reach. <br /></td></tr>
<tr class="separator:af9cbe2432658aac398498e0a7e96405f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a90705293787069f52372638d5450ef52"><td class="memItemLeft" align="right" valign="top"><a id="a90705293787069f52372638d5450ef52" name="a90705293787069f52372638d5450ef52"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Unique_id_holder</b> ()</td></tr>
<tr class="memdesc:a90705293787069f52372638d5450ef52"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread-safely construct an ID whose value is different from any other object of this class, past or future. <br /></td></tr>
<tr class="separator:a90705293787069f52372638d5450ef52"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb06f3132d6a6d1d0c509cbd50b9f768"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#abb06f3132d6a6d1d0c509cbd50b9f768">Unique_id_holder</a> (const <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html">Unique_id_holder</a> &amp;)</td></tr>
<tr class="memdesc:abb06f3132d6a6d1d0c509cbd50b9f768"><td class="mdescLeft">&#160;</td><td class="mdescRight">This copy constructor is identical in behavior to <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a90705293787069f52372638d5450ef52" title="Thread-safely construct an ID whose value is different from any other object of this class,...">Unique_id_holder()</a>, the default ctor.  <a href="classflow_1_1util_1_1Unique__id__holder.html#abb06f3132d6a6d1d0c509cbd50b9f768">More...</a><br /></td></tr>
<tr class="separator:abb06f3132d6a6d1d0c509cbd50b9f768"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24742b697933e623df30056aebbebfae"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#af9cbe2432658aac398498e0a7e96405f">id_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a24742b697933e623df30056aebbebfae">unique_id</a> () const</td></tr>
<tr class="memdesc:a24742b697933e623df30056aebbebfae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raw unique ID identifying this object as well as any object of a derived type.  <a href="classflow_1_1util_1_1Unique__id__holder.html#a24742b697933e623df30056aebbebfae">More...</a><br /></td></tr>
<tr class="separator:a24742b697933e623df30056aebbebfae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb6bab931f868d2a2e933d94f7540b1c"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html">Unique_id_holder</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#abb6bab931f868d2a2e933d94f7540b1c">operator=</a> (const <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html">Unique_id_holder</a> &amp;) const</td></tr>
<tr class="memdesc:abb6bab931f868d2a2e933d94f7540b1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">This assignment operator is a <code>const</code> no-op.  <a href="classflow_1_1util_1_1Unique__id__holder.html#abb6bab931f868d2a2e933d94f7540b1c">More...</a><br /></td></tr>
<tr class="separator:abb6bab931f868d2a2e933d94f7540b1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-methods" name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:a50489177a7731618ca130468c3872748"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#af9cbe2432658aac398498e0a7e96405f">id_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a50489177a7731618ca130468c3872748">create_unique_id</a> ()</td></tr>
<tr class="memdesc:a50489177a7731618ca130468c3872748"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for <code><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a90705293787069f52372638d5450ef52" title="Thread-safely construct an ID whose value is different from any other object of this class,...">Unique_id_holder()</a>.<a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a24742b697933e623df30056aebbebfae" title="Raw unique ID identifying this object as well as any object of a derived type.">unique_id()</a></code>; useful when all you want is the unique integer itself.  <a href="classflow_1_1util_1_1Unique__id__holder.html#a50489177a7731618ca130468c3872748">More...</a><br /></td></tr>
<tr class="separator:a50489177a7731618ca130468c3872748"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from all other objects of the same class ever constructed, across all time from program start to end. </p>
<p >To be clear, the uniqueness is not just for all existing objects at a given point in time (for which <code>this</code> could simply be used instead) but across all time.</p>
<h3>Copying behavior</h3>
<p >For obvious reasons, <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html" title="Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from a...">Unique_id_holder</a> cannot have standard copy construction and assignment semantics. It was contemplated to simply make class noncopyable (forbidding copy construction). However, then no derived type could use auto-generated copy construction and/or <code><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#abb6bab931f868d2a2e933d94f7540b1c" title="This assignment operator is a const no-op.">operator=()</a></code>, making the deriving usage pattern (see below) considerably less concise for such types.</p>
<p >Therefore, it defines a (somewhat unusual) copy constructor: It is simply equal to the default constructor and simply generates a unique ID. The reason: a common pattern (see below) will involve type <code>C</code> deriving from <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html" title="Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from a...">Unique_id_holder</a>. If <code>C</code> happens to use the auto-generated copy constructor implementation, <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html" title="Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from a...">Unique_id_holder</a>'s copy constructor will be invoked by this implementation. Since equal (by value) objects are still separate objects, the correct behavior is for the constructed object to gain a new ID.</p>
<p >The assignment operator <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#abb6bab931f868d2a2e933d94f7540b1c" title="This assignment operator is a const no-op.">operator=()</a> similarly has unusual behavior: it does nothing, for similar reasons.</p>
<h3>Thread safety, performance</h3>
<p >All operations safe for simultaneous execution on 2+ separate objects or on the same object. The ID accessor is a totally trivial accessor. Only construction requires any concurrent-access protection and internally uses an <code>atomic</code> for good efficiency.</p>
<h3>Usage patterns</h3>
<p >This can be used, in particular, to uniquely identify (over all time) objects of any type (across all types). The most concise usage pattern is probably via public (or possibly private) inheritance. Another is simply via composition (storage).</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> Widget_store::store_in_table(Widget* obj, <span class="keyword">const</span> <a class="code hl_class" href="classflow_1_1util_1_1Unique__id__holder.html">Unique_id_holder</a>&amp; obj_id_holder)</div>
<div class="line">{</div>
<div class="line">  m_unordered_map[obj_id_holder.<a class="code hl_function" href="classflow_1_1util_1_1Unique__id__holder.html#a24742b697933e623df30056aebbebfae">unique_id</a>()] = obj;</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Usage pattern 1: Inheritance.</span></div>
<div class="line"><span class="keyword">class </span>Widget : ..., <span class="keyword">public</span> <a class="code hl_class" href="classflow_1_1util_1_1Unique__id__holder.html">Unique_id_holder</a> <span class="comment">// Can change to private inheritance if we always register internally.</span></div>
<div class="line">{</div>
<div class="line"><span class="keyword">private</span>:</div>
<div class="line">  <span class="comment">// Example of an object registering itself.</span></div>
<div class="line">  <span class="keywordtype">void</span> some_private_method()</div>
<div class="line">  {</div>
<div class="line">    ...</div>
<div class="line">    s_widget_store.store_in_table(<span class="keyword">this</span>, *<span class="keyword">this</span>); <span class="comment">// `*this` is itself a Unique_id_holder.</span></div>
<div class="line">    ...</div>
<div class="line">  }</div>
<div class="line">  <span class="keyword">static</span> Widget_store s_widget_store;</div>
<div class="line">};</div>
<div class="line">...</div>
<div class="line">  <span class="comment">// Example of outside code registering an object.</span></div>
<div class="line">  Widget_store widget_store;</div>
<div class="line">  Widget widget;</div>
<div class="line">  widget_store::store_in_table(&amp;widget, widget); <span class="comment">// `widget` is itself a Unique_id_holder.</span></div>
<div class="line">...</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Usage pattern 2: Composition.</span></div>
<div class="line">class Widget : ...</div>
<div class="line">{</div>
<div class="line"><span class="keyword">private</span>:</div>
<div class="line">  <span class="comment">// Example of an object registering itself.</span></div>
<div class="line">  <span class="keywordtype">void</span> some_private_method()</div>
<div class="line">  {</div>
<div class="line">    ...</div>
<div class="line">    s_widget_store.store_in_table(<span class="keyword">this</span>, m_uniq_id_holder);</div>
<div class="line">    ...</div>
<div class="line">  }</div>
<div class="line">  <a class="code hl_function" href="classflow_1_1util_1_1Unique__id__holder.html#a90705293787069f52372638d5450ef52">Unique_id_holder</a> m_uniq_id_holder;</div>
<div class="line">  <span class="keyword">static</span> Widget_store s_widget_store;</div>
<div class="line">};</div>
<div class="ttc" id="aclassflow_1_1util_1_1Unique__id__holder_html"><div class="ttname"><a href="classflow_1_1util_1_1Unique__id__holder.html">flow::util::Unique_id_holder</a></div><div class="ttdoc">Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from a...</div><div class="ttdef"><b>Definition:</b> uniq_id_holder.hpp:107</div></div>
<div class="ttc" id="aclassflow_1_1util_1_1Unique__id__holder_html_a24742b697933e623df30056aebbebfae"><div class="ttname"><a href="classflow_1_1util_1_1Unique__id__holder.html#a24742b697933e623df30056aebbebfae">flow::util::Unique_id_holder::unique_id</a></div><div class="ttdeci">id_t unique_id() const</div><div class="ttdoc">Raw unique ID identifying this object as well as any object of a derived type.</div><div class="ttdef"><b>Definition:</b> uniq_id_holder.cpp:53</div></div>
<div class="ttc" id="aclassflow_1_1util_1_1Unique__id__holder_html_a90705293787069f52372638d5450ef52"><div class="ttname"><a href="classflow_1_1util_1_1Unique__id__holder.html#a90705293787069f52372638d5450ef52">flow::util::Unique_id_holder::Unique_id_holder</a></div><div class="ttdeci">Unique_id_holder()</div><div class="ttdoc">Thread-safely construct an ID whose value is different from any other object of this class,...</div><div class="ttdef"><b>Definition:</b> uniq_id_holder.cpp:31</div></div>
</div><!-- fragment --><p >Update: A simplified pattern is now possible: If you just want the raw unique number itself and don't even want to keep <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html" title="Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from a...">Unique_id_holder</a> objects around or refer to them, call the static <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a50489177a7731618ca130468c3872748" title="Short-hand for Unique_id_holder().unique_id(); useful when all you want is the unique integer itself.">create_unique_id()</a> which returns a new raw <code>id_t</code> integer. The above 2 usage patterns can be rewritten to pass around <code>id_t</code> values. The "Example of outside code registering an object" sub-case is the one exception to that, as for that either <code>store_in_table()</code> must continue to take a <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html" title="Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from a...">Unique_id_holder</a> and not a raw integer, or I suppose <code>m_uniq_id_holder</code> must be made public which some would not like. </p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="abb06f3132d6a6d1d0c509cbd50b9f768" name="abb06f3132d6a6d1d0c509cbd50b9f768"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb06f3132d6a6d1d0c509cbd50b9f768">&#9670;&nbsp;</a></span>Unique_id_holder()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::util::Unique_id_holder::Unique_id_holder </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html">Unique_id_holder</a> &amp;&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>This copy constructor is identical in behavior to <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a90705293787069f52372638d5450ef52" title="Thread-safely construct an ID whose value is different from any other object of this class,...">Unique_id_holder()</a>, the default ctor. </p>
<p ><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html" title="Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from a...">Unique_id_holder</a> doc header explains this behavior and why copy construction is not disallowed entirely. </p>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a50489177a7731618ca130468c3872748" name="a50489177a7731618ca130468c3872748"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a50489177a7731618ca130468c3872748">&#9670;&nbsp;</a></span>create_unique_id()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#af9cbe2432658aac398498e0a7e96405f">Unique_id_holder::id_t</a> flow::util::Unique_id_holder::create_unique_id </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Short-hand for <code><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a90705293787069f52372638d5450ef52" title="Thread-safely construct an ID whose value is different from any other object of this class,...">Unique_id_holder()</a>.<a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a24742b697933e623df30056aebbebfae" title="Raw unique ID identifying this object as well as any object of a derived type.">unique_id()</a></code>; useful when all you want is the unique integer itself. </p>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#a24742b697933e623df30056aebbebfae" title="Raw unique ID identifying this object as well as any object of a derived type.">unique_id()</a>. </dd></dl>

</div>
</div>
<a id="abb6bab931f868d2a2e933d94f7540b1c" name="abb6bab931f868d2a2e933d94f7540b1c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb6bab931f868d2a2e933d94f7540b1c">&#9670;&nbsp;</a></span>operator=()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html">Unique_id_holder</a> &amp; flow::util::Unique_id_holder::operator= </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1util_1_1Unique__id__holder.html">Unique_id_holder</a> &amp;&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This assignment operator is a <code>const</code> no-op. </p>
<p ><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html" title="Each object of this class stores (at construction) and returns (on demand) a numeric ID unique from a...">Unique_id_holder</a> doc header explains this behavior, and why assignment is not disallowed entirely.</p>
<dl class="section return"><dt>Returns</dt><dd><code>*this</code>. </dd></dl>

</div>
</div>
<a id="a24742b697933e623df30056aebbebfae" name="a24742b697933e623df30056aebbebfae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24742b697933e623df30056aebbebfae">&#9670;&nbsp;</a></span>unique_id()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1util_1_1Unique__id__holder.html#af9cbe2432658aac398498e0a7e96405f">Unique_id_holder::id_t</a> flow::util::Unique_id_holder::unique_id </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Raw unique ID identifying this object as well as any object of a derived type. </p>
<dl class="section return"><dt>Returns</dt><dd>Numeric ID. Can be used as a key for most classic associative containers without extra code. </dd></dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>util/<a class="el" href="uniq__id__holder_8hpp.html">uniq_id_holder.hpp</a></li>
<li>util/<a class="el" href="uniq__id__holder_8cpp.html">uniq_id_holder.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:32 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
